const { defineConfig } = require('@vue/cli-service')
const Mock = require('mockjs')
const bodyParser = require('body-parser') // 引入转json的中间件--post请求需要
// 模拟商品列表数据
const { list } = Mock.mock({
  'list|40': [{
    'id|+1': 1, // id从1开始，每次递增1
    'image': '@image(200X200,@color)', // 生成200X200随机颜色的图片
    'title': '@ctitle(3,50)', // 生成3到50个汉字的标题
    'price|1-100.1-2': 1 // 生成1到100之间的浮点数，小数点后1到2位
  }]
})
// 模拟分类列表数据
const { products } = Mock.mock({
  'products|70': [
    {
      'id|+1': 1,
      'classify': '@pick(["食品","电器","洗护","女装","手机"])',
      'title': '@ctitle(3,5)',
      'image': '@image(100X100,@color)'
    }
  ]
})
// 存储注册的用户信息：注册的账号密码
const users = [
  { username: '张三', password: '123456' }
]

module.exports = defineConfig({
  transpileDependencies: true,
  // webpack提供的开发者服务器
  devServer: {
    setupMiddlewares: (mid, dev) => {
      dev.app.use(bodyParser.json()) // 注册body-parser中间件
      // 列表接口
      // dev.app.get('/api/list', (req, res) => {
      //   res.send({
      //     code: 200,
      //     data: list,
      //     total: list.length
      //   })
      // })

      // 列表接口-分页请求
      dev.app.get('/api/list', (req, res) => {
        const { pagination, pageNum } = req.query // 获取前端传过来的参数：页码、条数
        res.send({
          code: 200,
          // 1  10  ---- 0  1   2  3   4  5  6  7  8  9 
          //  2  10  ---- 10  11   12  。。。 19 
          data: list.slice((pagination - 1) * pageNum, pagination * pageNum),
          total: list.length
        })
      })
      // 详情接口
      dev.app.get('/api/detail', (req, res) => {
        const { id } = req.query
        res.send({
          code: 200,
          // find(): 查找数组中符合条件的第一个元素
          data: list.find(item => item.id == id)
        })
      })
      // 分类接口
      dev.app.get('/api/kind', (req, res) => {
        const { key } = req.query
        res.send({
          code: 200,
          data: products.filter(item => item.classify == key)
        })
      })
      // 搜索接口
      dev.app.get('/api/search', (req, res) => {
        const { value } = req.query
        res.send({
          code: 200,
          data: list.filter(item => item.title.includes(value))
        })
      })
      // 注册接口
      dev.app.post('/api/register', (req, res) => {
        const { username, password } = req.body // 后端接收到前端传来的账号密码
        // 判断用户输入的账号是否已经存在， 已经存在说明该账号已经注册过了，提示错误；不存在就让正常注册
        // 判断前端传来的username是否在users这个数组中
        // every(): 判断数组中所有元素是否都满足条件，只要有一个不满足返回false，所有都满足返回true
        const isAdd = users.every(item => item.username != username)  // isAdd 只能是true或false
        if (isAdd) {
          // 说明该账号还未注册
          users.push({
            username, // username: username
            password //  password: password
          })
          res.send({
            code: 200,
            token:Mock.Random.guid(),
            message: '注册成功'
          })
        } else {
          // 说明该账号已经注册了
          res.send({
            code: 0,
            message: '该账号已经注册了~'
          })
        }
      })

      //登录接口
      dev.app.post('/api/login',(req,res)=>{
        const {username,password} = req.body
        const user =users.find(item=>item.username==username&&item.password==password)
        if(user){
          res.send({
            code:200,
            message:'登录成功'
          })
        }else{
          res.send({
            code:0,
            message:'账号或密码错误'
          })
        }
      })
      return mid
    }
  }
})
